package com.jingxuan.mapper;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import lombok.Data;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 推荐数据访问层
 */
@Mapper
public interface RecommendMapper {
    
    /**
     * 获取商品推荐特征数据。 
     * 查询商品的价格、好评率、评论数、平均点赞数、最后评论时间等特征，
     * 用于推荐算法计算。
     *
     * @param limit 限制查询数量（可为null表示不限制）
     * @return 商品特征数据列表
     */
    List<ProductFeatureDto> getProductFeatures(@Param("limit") Integer limit);
    
    /**
     * 根据用户偏好标签过滤获取商品特征数据。
     * 优先返回与用户偏好标签匹配的商品特征。
     *
     * @param preferenceTags 用户偏好标签列表（如["美食", "旅游", "摄影"]）
     * @param limit          限制查询数量
     * @return 商品特征数据列表
     */
    List<ProductFeatureDto> getProductFeaturesByPreferences(@Param("tags") List<String> preferenceTags,
                                                           @Param("limit") Integer limit);

    /**
     * 根据指定的商品ID集合获取特征数据.
     *
     * @param ids 商品ID集合
     * @return 商品特征数据列表
     */
    List<ProductFeatureDto> getProductFeaturesByIds(@Param("ids") List<String> ids);
    
    /**
     * 获取所有商品及其描述信息（用于排行榜计算）
     *
     * @return 商品特征数据列表（包含描述）
     */
    List<ProductFeatureWithDescriptionDto> getAllProductsWithDescription();
    
    /**
     * 根据商品ID获取商品描述
     *
     * @param productId 商品ID
     * @return 商品描述
     */
    String getProductDescription(@Param("productId") String productId);
    
    /**
     * 商品特征DTO（用于推荐算法）
     */
    @Data
    class ProductFeatureDto {
        /** 商品ID */
        private String productId;
        
        /** 商品名称 */
        private String productName;
        
        /** 商品价格 */
        private java.math.BigDecimal price;
        
        /** 好评率（0-1之间） */
        private Double positiveRate;
        
        /** 评论数量 */
        private Integer commentCount;
        
        /** 平均点赞数 */
        private Double averageLikes;
        
        /** 最后评论时间 */
        private LocalDateTime lastCommentTime;
        
        /** 产品类型 */
        private String productType;
        
        /** 商品图片URL */
        private String pictureUrl;
        
        /** 平台名称 */
        private String platformName;
        
        /** 商品描述 */
        private String description;

    }
    
    /**
     * 商品特征DTO（包含描述，用于排行榜算法）
     */
    @Data
    class ProductFeatureWithDescriptionDto {
        /** 商品ID */
        private String productId;
        
        /** 商品名称 */
        private String productName;
        
        /** 商品价格 */
        private java.math.BigDecimal price;
        
        /** 好评率（0-1之间） */
        private Double positiveRate;
        
        /** 评论数量 */
        private Integer commentCount;
        
        /** 平均点赞数 */
        private Double averageLikes;
        
        /** 最后评论时间 */
        private LocalDateTime lastCommentTime;
        
        /** 产品类型 */
        private String productType;
        
        /** 商品图片URL */
        private String pictureUrl;
        
        /** 平台名称 */
        private String platformName;
        
        /** 商品描述 */
        private String description;
    }
}

